<?php

namespace app\queueHandle;

use app\queueHandle\controller\NewsHandle;
use think\Db;
use think\queue\Job;

//新闻相关异步处理News队列
class News
{
    public function fire(Job $job, $data)
    {
        // 有些消息在到达消费者时,可能已经不再需要执行了
        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
        if (!$isJobStillNeedToBeDone) {
            $job->delete();
            return;
        }


        $isJobDone = $this->doHelloJob($data);

        if ($isJobDone) {
            // 如果任务执行成功， 记得删除任务
            $job->delete();
            //print("<info>Hello Job has been done and deleted"."</info>\n");
        } else {
            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
                //print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");

                $job->delete();

                // 也可以重新发布这个任务
                //print("<info>Hello Job will be availabe again after 2s."."</info>\n");
                //$job->release(2); //$delay为延迟时间，表示该任务延迟2秒后再执行
            }
        }
    }

    /**
     * 有些消息在到达消费者时,可能已经不再需要执行了
     * @param array|mixed $data 发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function checkDatabaseToSeeIfJobNeedToBeDone($data)
    {
        return true;
    }

    /**
     * 根据消息中的数据进行实际的业务处理...
     */
    private function doHelloJob($data)
    {

        try {
            switch ($data['type']) {

                case 'newsTreadFavourHandle':
                    //echo '文章点赞和踩和取消赞取消踩的处理';
                    NewsHandle::treadFavourHandle($data);
                    break;
                case 'readHandle':
                    //echo '文章的被阅读的处理的阅读数处理';
                    NewsHandle::readHandle($data);
                    break;
                case 'shareHandle':
                    //echo '文章的被分享的处理的分享数处理';
                    NewsHandle::shareHandle($data);
                    break;
                case 'newsHeatCountHandle':
                    //文章的热度处理
                    NewsHandle::newsHeatCountHandle($data);
                    break;
                case 'feedHandle':
                    //echo 'feed流处理';
                    NewsHandle::feedHandle($data);
                    break;
                case 'attentionFeedHandle':
                    //关注用户的feed流异步处理
                    NewsHandle::attentionFeedHandle($data);
                    break;
                case 'cancleAttentionFeedHandel':
                    //取消关注用户的feed流异步处理
                    NewsHandle::cancleAttentionFeedHandel($data);
                    break;
                case 'collectHandle':
                    //收藏的异步处理
                    echo '收藏的异步处理';
                    break;
            }

            return true;
        } catch (\Exception $exception) {
            print_r($exception->getMessage());
            return false;
        }
    }
}